#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ROZT 45
void clrstr(char *);

struct film {
	char tytul[ROZT];
	int ocena;
	struct film * nast;
	struct film * poprz;
};

int main(void) {
	struct film * glowny = NULL;
	struct film * biezacy, * poprzedni, * nastepny, * ostatni;
	struct film tmp;
	char wejscie[ROZT];

	puts("Wprowadz tytul filmu:");
	while(fgets(wejscie, ROZT, stdin) != NULL && wejscie[1] != '\0') {
		clrstr(wejscie);
		biezacy = (struct film *) malloc(sizeof(struct film));
		if(glowny == NULL) {
			glowny = biezacy;
		}
		else {
			poprzedni->nast = biezacy;
			biezacy->poprz = poprzedni;
		}
		biezacy->nast = NULL;
		strcpy(biezacy->tytul, wejscie);
		puts("Wprowadz ocene <1-10>:");
		scanf("%d", &biezacy->ocena);
		while(getchar() != '\n')
			continue;
		printf("Wprowadz nastepny (ENTER - koniec):\n");
		poprzedni = biezacy;
	}
	if(glowny == NULL)
		printf("Nie wprowadzono zadnych filmow. ");
	else {
		printf("Oto lista filmow:\n");
		biezacy = glowny;
		ostatni = NULL;
		while(ostatni != glowny) {
			while(biezacy != ostatni) {
				if(biezacy->nast != NULL) {
					nastepny = biezacy->nast;
					if(strcmp(biezacy->tytul, nastepny->tytul) > 0) {
						strcpy(tmp.tytul, biezacy->tytul);
						strcpy(biezacy->tytul, nastepny->tytul);
						strcpy(nastepny->tytul, tmp.tytul);
					}
				}
				else
					break;
				biezacy = biezacy->nast;
			}
			if(ostatni != NULL)
				ostatni = biezacy->poprz;
			else
				ostatni = biezacy;
			biezacy = glowny;
		}
		biezacy = glowny;
		while(biezacy != NULL) {
			printf("Tytul: %s, Ocena: %d\n", biezacy->tytul, biezacy->ocena);
			biezacy = biezacy->nast;
		}
	}
	printf("Do widzenia!\n");

	return 0;
}
void clrstr(char *str) {
	while(*str) {
		if(*str == '\n')
			*str = '\0';
		str++;
	}
}
